import java.util.*;


public class code3 {
    int m,n;
    int[][] memo = new int[1010][1010];

    int[] dx = {1,-1,0,0};
    int[] dy = {0,0,-1,1};

    public  int dfs(int[][] matrix,int i,int j) {
        if(memo[i][j]!=-1) return memo[i][j];

        int len = 1;
        for(int k=0;k<4;k++) {
            int x = i+dx[k];
            int y = j+dy[k];
            if(x>=0&&x<m&&y>=0&&y<n&&matrix[x][y]>matrix[i][j]) {
                len = Math.max(len,1+dfs(matrix,x,y));
            }
        }

        memo[i][j] = len;
        return len;
    }
    public int solve (int[][] matrix) {
        m = matrix.length;
        n = matrix[0].length;
        //初始化记忆化数组
        for(int i=0;i<m;i++) {
            for(int j=0;j<n;j++) {
                memo[i][j]=-1;
            }
        }
        int ret = 1;
        for(int i=0;i<m;i++) {
            for(int j=0;j<n;j++) {
                ret = Math.max(ret,dfs(matrix,i,j));
            }
        }
        return ret;
    }
}